package com.guagua.chat.star;
/**
 * 北京八度互联科技有限公司版权所有
 * Copyright (C) Badu Corporation. All Rights Reserved
 */
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;

import com.guagua.chat.photo.Photo;
import com.guagua.chat.photo.PhotoDao;
import com.guagua.chat.room.ChatRoomUtil;
import com.guagua.vas.util.CacheManager;


/** ******************************************************************
* 类概要:明星管理类
 * @author 白云鹏
 * @version 2012年7月31日10:11:39
*******************************************************************/
public class StarManager {
	
private static StarManager mgr = null;
	
	private StarManager() {
	}
	/**
	 * 函数说明：获取单例明星管理对象 <br/>
	 * 
	 * @return 返回结果说明. （StarManager）明星管理对象
	 */
	public static StarManager getInstance() {
		
		if (null == mgr) {
			mgr = new StarManager();
		}
		return mgr;
	}

	
	private StarDao dao=new StarDao();
	private PhotoDao phDao=new PhotoDao();
	
	/**
	 * 函数说明：根据房间id查询所有明星 <br/>
	 * 
	 * @param room_id
	 *            类型:(long)；<br/> 房间id<br/>；
	 * @return 返回结果说明. （List）明星对象集合
	 */
	///暂时作废，以后再修改。
	public List listStar(long room_id){
		String key = ChatRoomUtil.ROOMSINGER_ROOM_ID(room_id);
		List stars = new ArrayList();
		//从缓存中查询是否有值
		stars=(List)CacheManager.getInstance().get(key);
		if (stars==null){
			stars = new ArrayList();
			//数据库中获取明星
			stars.add(dao.listStar(room_id));
			//数据库中获取标题名称
//			String star_subject=dao.getStarSub(room_id);
//			stars.add(star_subject.equals("")?"明星推荐":star_subject);
			//将结果集放入缓存中，缓存5分钟
//			CacheManager.getInstance().put("star_"+room_id,stars,300);
			CacheManager.getInstance().put(key, stars,(long)30,TimeUnit.MINUTES);
		}		
		return stars;
	}
	/**
	 * 函数说明：根据房间id分页查询所有明星 <br/>
	 * 
	 * @param currentPage
	 *            类型:(int)；<br/> 当前查询的页码<br/>；
	 * @param pageSize
	 *            类型:(int)；<br/> 每页记录数<br/>；
	 * @param room_id
	 *            类型:(long)；<br/> 房间id<br/>；
	 * @return 返回结果说明. （Object[]）对象数值，包含查询页数据以及分页显示信息
	 */
	public List listStar(int currentPage,int pageSize,long room_id){
		List stars = new ArrayList();
		if(currentPage==1){//第一页缓存，其他页面不管
			String key = ChatRoomUtil.ROOMSINGER_ROOM_ID(room_id);
//			//清空缓存
//			CacheManager.getInstance().remove(key);
			//从缓存中查询是否有值
			stars=(List)CacheManager.getInstance().get(key);
			if (stars==null){
				stars = new ArrayList();
				Object[] arr = dao.listStar(currentPage, pageSize, room_id);
				stars.add(arr[0]);
				stars.add(arr[1]);
				CacheManager.getInstance().put(key, stars,(long)30,TimeUnit.MINUTES);
			}
		}else{
			Object[] arr = dao.listStar(currentPage, pageSize, room_id);
			stars.add(arr[0]);
			stars.add(arr[1]);
		}
		return stars;
	}
	
	
	/**
	 * 函数说明：给某房间添加推荐的明星 <br/>
	 * 
	 * @param star
	 *            类型:(Star)；<br/> 明星对象<br/>；
	 * @param photo
	 *            类型:(Photo)；<br/> 图片对象，主要是明星头像<br/>；
	 * @return 返回结果说明. （boolean）是否操作成功，true为成功，false为失败
	 */
	public boolean addStar(Star star,Photo photo){
		boolean flag=false;
		//对图片地址进行处理
		if (photo.getPhoto_path().indexOf("?c=")>0){
			String imgPath=photo.getPhoto_path().replaceAll("http://", "").replaceAll("https://", "");
			imgPath=imgPath.substring(imgPath.indexOf("/"));
			photo.setPhoto_path(imgPath);
			//添加明星头像
			long photoID=phDao.addPhoto(photo);
			star.setFace(photoID);
		}
		//检查推荐标题
		if (dao.getStarSub(star.getRoom_id()).equals("")){
			dao.addStarSub(star.getRoom_id(), star.getSubject());
		}else{
			dao.updateStarSub(star.getRoom_id(), star.getSubject());
		}
		
		if (dao.addStar(star)){
			flag=true;
		}
		if(flag){//清除缓存
			CacheManager.getInstance().remove( ChatRoomUtil.ROOMSINGER_ROOM_ID(star.getRoom_id()));
			CacheManager.getInstance().remove(ChatRoomUtil.ROOMSINGER_4_ROOM_ID(star.getRoom_id()));
		}
		return flag;
		
	}
	/**
	 * 函数说明：删除某房间添加的明星 <br/>
	 * 
	 * @param star
	 *            类型:(Star)；<br/> 明星对象<br/>；
	 * @param photo
	 *            类型:(Photo)；<br/> 图片对象，主要是明星头像<br/>；
	 * @return 返回结果说明. （boolean）是否操作成功，true为成功，false为失败
	 */
	public boolean delStar(Star star,Photo photo){
		boolean flag=false;
		
		//删除明星头像
		if (photo.getId()>0)
		     phDao.delPhoto(photo);
		
		//删除明星
		
		if (dao.delStar(star)){
			flag=true;
		}
		if(flag){//清除缓存
			CacheManager.getInstance().remove( ChatRoomUtil.ROOMSINGER_ROOM_ID(star.getRoom_id()));
			CacheManager.getInstance().remove(ChatRoomUtil.ROOMSINGER_4_ROOM_ID(star.getRoom_id()));
		}

		return flag;
		
	}
	
	public boolean delStars(long roomid){
		boolean flag=false;		
		if (dao.delStars(roomid)){
			flag=true;
		}
		if(flag){//清除缓存
			CacheManager.getInstance().remove( ChatRoomUtil.ROOMSINGER_ROOM_ID(roomid));
			CacheManager.getInstance().remove(ChatRoomUtil.ROOMSINGER_4_ROOM_ID(roomid));
		}

		return flag;
	}
	public boolean delStars(long roomid,long currTime){
		boolean flag=false;		
		if (dao.delStars(roomid,currTime)){
			flag=true;
		}
		return flag;
	}
	public boolean addStars(List<Star> stars,long roomid,long currTime){
		boolean flag=false;		
		if (dao.addStars(stars,currTime)){
			flag=true;			
		}
		return flag;
	}
	
	public boolean modStarSort(long starId,int sort,long roomid){
		boolean flag=false;
		
		if (dao.modStarSort(starId,sort)){
			flag=true;
		}
		if(flag){//清除缓存
			CacheManager.getInstance().remove( ChatRoomUtil.ROOMSINGER_ROOM_ID(roomid));
			CacheManager.getInstance().remove(ChatRoomUtil.ROOMSINGER_4_ROOM_ID(roomid));
		}

		return flag;
	}	
}
